package simple;

/**
 * 给定一个二叉树root和一个值 sum ，判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
 * 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
 * 2.叶子节点是指没有子节点的节点
 * 3.路径只能从父节点到子节点，不能从子节点到父节点
 * 4.总节点数目为n
 *
 *
 * @author WangZhiJian
 * @since 2022/1/14
 */
public class 二叉树中和为某一值的路径一 {
    /**
     *
     *
     *
     * @param root TreeNode类
     * @param sum int整型
     * @return bool布尔型
     */
    public static boolean hasPathSum (TreeNode root, int sum) {
        // write code here
        if(root == null )
            return false;
        // 叶子节点并且等式成立,返回true
        if( root.left == null && root.right == null && root.val == sum )
            return true;
        // 下一层的目标结果
        int nextVal = sum - root.val;
        //递归
        return hasPathSum(root.left,nextVal) || hasPathSum(root.right,nextVal);
    }


    public static class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
     }
}
